#include<iostream>
using namespace std;
#include<assert.h>
#include<unistd.h>
#include<signal.h>

#define MAX_NUM 31

void count(int s){
    while (s)
    {
        printf("cnt:%d\n",s);
        fflush(stdout);    
        s--;
        sleep(1);
    }
    
}
void handler(int signo){
    cout<<"get a signo :"<<signo<<"正在处理中"<<endl;
    count(20);
}

static void show_pending(const sigset_t&  pending){
    for(int i = MAX_NUM;i >= 0;i--){
        if(sigismember(&pending,i)){
            cout<<"1";
        }else{
            cout<<"0";
        } 
    }
      cout<<"\n";
}

//使用sigaction来捕捉信号
int main(){
    struct sigaction act,oact;
    sigset_t pending;
    act.sa_handler = handler;
    act.sa_flags = 0;
    //凡是sigset_t 类型的数据都要使用接口进行初始化
    sigemptyset(&act.sa_mask);//在处理某种信号的同时，顺便屏蔽其他信号可以添加到sa——mask
    sigaddset(&act.sa_mask,3);
    //设置进内核
    sigaction(2,&act,&oact);

    while(true){
        //1:初始化：
        sigemptyset(&pending);
        //2:获取pending
        sigpending(&pending);
        //3:打印
        show_pending(pending);
        sleep(1);
    }

    return 0;
}